1988-Club80-24, S.40-42

HRG, daß die Schwarte kracht


Arnulf Sopp

Im Sonderheft über die Aufrüstung des Genie 3s stellten Helmut und ich unsere Erweiterung vor, mit der alle Speicherbaugruppen dieses Computers eine vierfache Kapazität erhielten. Dazu gehörten auch der Bildschirm mit 8 kB (zuvor 2 kB) und die Graphik mit 256 kB (vorher 64).

Viel später fiel mir auf, daß der Video-Controller (6845 CRTC) 14 Adreßleitungen hat. Damit könnte er sogar 16 kB Bildschirm verwalten. Er war aber noch immer wegen der ursprünglichen 2 kB nur mit 11 Leitungen verkabelt. So wurden die Addressen A11 und A12 des 6845 auch noch an den Bildwiederholspeicher angelötet. Das sieht nun so aus:

Nach dieser Operation ist die Hardware des Videoteils nun folgendermaßen konfiguriert: wie in alten Zeiten kann die CPU nur höchtens 2 kB von 3800-3FFFh gleichzeitig erreichen. Das langt z.B. für 80 X 26 Zeichen. Den Zugriff auf die vollen 8 kB erhält sie in Portionen zu 2 kB über die Bits 2 und 3 des Ports F3h (per OUT-Befehl). So ergeben sich aus der Perspektive des Z80 vier Einzelbildschirme zu 2048 Zeichen. Sie können selbstverständlich nacheinander mit einem zusammenhängenden Text befüllt werden. Das selbe gilt für die Graphik mit achtmal 32 kB oder zweimal 128 kB.

Der CRTC aber ist über 13 Adreßleitungen direkt mit dem Video-RAM verbunden; für ihn ist es ein einziger Speicher, den er stückweise oder auch ganz anzeigen kann (sofern der Monitor mitspielt - meiner tut es nicht: s.u.). Daher besteht nun die Möglichkeit, die CPU in einen Teilbereich des Bildschirms von max. 2 kB Größe werkeln zu lassen, während auf Wunsch wesentlich mehr angezeigt wird.

Nun war es theoretisch möglich, den kompletten Videospeicher von 8192 Zeichen anzuzeigen. Da wäre aber in dem Gedränge nicht nur nichts mehr zu erkennen. Die Hardware des Monitors (nicht des Computers) setzt auch Grenzen in der vertikalen und horizontalen Punktdichte und damit in der Anzahl der angezeigbaren Zeichen senkrecht und waagerecht.

Helmut und ich wollten es wissen. Zum Ausprobieren der maximal möglichen Auflösung ging ich von dem Bildschirmformat 92 X 22 Zeichen bei einer Zeichenhöhe von 12 Scan-Zeilen aus. 92 Zeichen ist bei meinem Monitor die höchstmögliche Zeilenlänge, was ich früher schon einmal ausgetestet hatte. Bei 22 Zeilen ergibt sich eine Bildspeichergröße von knapp 2 kB, also das alte Maximum. 12 Zeilen pro Zeichen erwiesen sich als Obergrenze denn bei 13 Scan-Zeilen begann mein Bildschirm zu schwimmen.

Um die größtmögliche Höhe des Bildschirms rauszukriegen, programmierte ich zunächst den Interlace-Modus. Dabei werden abwechselnd zwei Halbbilder angezeigt, um die Anzahl der möglichen Scan-Zeilen zu verdoppeln. Nach der Schimpansen-Methode (Rumprobieren) fand ich anschließend nach und nach die Maximaldaten für die Register 4-7 des CRTC heraus, um den Bildschirm auch vertikal bis zum Anschlag auszureizen.

Resultat waren 92 X 60 Zeichen, also fast fünfeinhalb kByte Fernsehen. Für ASCII-Texte wird man diese Format kaum je brauchen. Es ist witzlos, halbe Bibeln gleichzeitig auf dem Bildschirm zu haben. Für Graphik- Anwendungen kann jedoch eine etxrem hohe Auflösung sehr interessant sein. Bei einer Zeichenbreite von 8 Punkten und einer Höhe von 12 Dots gibt dieses Format eine Auflösung von 736 X 720 Pixeln her. Und das mal 2 weil der G3s zwei Graphikseiten speichern und anzeigen kann. Theoretisch sind sogar 1024 X 1024 Dots denkbar, was ein Monitor mit hinreichender Bandbreite dann auch anzeigen sollte. Daher das überlebensgroße 'H' in der Überschrift.

Das im Anschluß gelistete Programm füllt den Bildschirm mit einem Graphik- muster, das erkennen läßt, wo welche 32-kB-Seite des Graphikspeichers beginnt. Zunächst werden die experimentell ermittelten Daten auf den CRTC ausgegeben. Es folgt ein wenig G3s-spezifisches Vorgeplänkel (ASCII-Bild- schirm aus- und Graphik einblenden). Danach werden über die Bits 2 und 3 des Port F3h nacheinander die 4 Bildschirme bzw. Graphik-Memories selektiert und mit dem Punktmuster des Bildschirmzählers beladen. Es entstehen senkrechte Streifen unterchiedlicher Länge und Dicke. Wo sich die Form eines Streifens ändert, beginnt ein neuer der 4 Bildschirme alter Größe.

Diese äußerst üppige Auflösung wird man wohl selten brauchen. Durchaus sinnvoll ist aber die Möglichkeit, in einem gesonderten Abschnitt des Bildschirms ständig ein Menü, eine oder mehrere Statuszeilen oder ein DIR in der Anzeige zu haben, während die CPU darunter oder darüber noch immer über volle 2 kB Videospeicher verfügen kann. Das Menü wird auch nicht durch einen Scroll oder CLS gelöscht, weil nur der CRTC, nicht aber die CPU gleichzeitig den vollen Bildwiederholspeicher von 8 kB beherrscht.


Arnulf Sopp


		00001 ; Testroutine, mit der die höchstmögliche Graphikauflösung
		00002 : beim Genie 3s mit Helmut Bernhardts Mega-Banker
		00003 ; durch Probieren ermittelt werden kann
		00004 ;
		00005 ; Sopp
		00006
5200		00007
		00008
5200  214152	00009 start	LD	HL,data		;Parametertabelle für den CRTC
5203  D1F710	00010		LD	BC,10f7h	;Zähler 16 Register, CRTC Datenport F7
5206  AF	00011		XOR	A		;A <= 00h CRTC ab Register 0 programmieren
5207  D3F6	00012 setcrtc	OUT	(0f6h),A	;internes CRTC-Register adressieren
5209  3C	00013		INC	A		;auf nächstes von 16 Registern stellen
520A  EDA3	00014		OUTI			;Datum auf CRTC ausgeben, Zeiger weiter
520C  20F9	00015		JR	NZ,setcrtc	;falls noch nicht 16 Daten ausgegeben
520E  DBFA	00016		IN	A,(0fah)	;Systemport 1 des G3s
5210  F5	00017		PUSH	AF		;Inhalt retten
5211  F602	00018		OR	02h		;Graphik anzeigen
5213  E67F	00019		AND	7fh		;ASCII-Bildschirm ausschalten
5215  F5	00020		PUSH	AF		;diesen Zustand auch retten
5216  F608	00021		OR	08h		;Graphik für die CPU für RD/WR freigeben
5218  F3	00022		DI			;vorsichtshalber
5219  D3FA	00023		OUT	(0fah),A	;Systembyte 1 neu schreiben
521B  0604	00024		LD	B,04h		;Zähler für 4 Bildsch. des Vierfach G3s
521D  AF	00025		XOR	A		;A <= 00h, ab Bildsch. 0 des 4fach G3s
521E  210080	00026 fillscr	LD	HL,8000h	;Anfangsadresse des Grafikspeichers
5221  54	00027		LD	D,H		;DE <= 8000h = 32kB Graphik pro Bildsch.
5222  5D	00028		LD	E,L
5223  D3F3	00029		OUT	(0f3h),A	;einen v. 4 Gr.-Bildschirmen selektieren
5225  4F	00030		LD	C,A		;Inhalt von Port F3h retten
5226  70	00031 setpix	LD	(HL),B		;Pixelmuster 04, 03, 02, 01 anzeigen
5227  23	00032		INC	HL		;nächste Stelle des Graphikspeichers
5228  1B	00033		DEC	DE		;Bytezähler herunterzählen
5229  7A	00034		LD	A,D		;prüfen ob
522A  B3	00035		OR	E		;der Zähler schon abgelaufen ist
522B  20F9	00036		JR	NZ,setpix	;falls nein: weiter Pixels anzeigen
522D  79	00037		LD	A,C		;A <= Inhalt von Port F3h
522E  C604	00038		ADD	A,04h		;abgelaufen: nächsten Bildschirm selekt.
5230  10EC	00039		DJNZ	fillscr		;nächst. Bildsch. mir einem Muster füllen
5232  AF	00040		XOR	A		;A <= 0, Bildschirm 0 des Vierfach G3s
5233  D3F3	00041		OUT	(0f3h),A	;zurückstellen
5235  F1	00042		POP	AF		;Systenbyte 1 (noch alt angez. Graphik)
5236  D3FA	00043		OUT	(0fah),A	;ab 8000h wieder RAM einblenden
5238  CD490	00044		CALL	0049h		;auf irgendeinen Tastendruck warten
523B  F1	00045		POP	AF		;ursprüngl. Inhalt von Port FAh (o. Gr.)
523C  D3FA	00046		OUT	(0fah),A	;restaurieren
523E  C3C901	00047		JP	01c9h		;CLS (Videoformat restaur.) EI und ENDE
		00048
		00049 ; Die Daten für den CRTC können nach Belieben zum Test geändert werden
		00050
5241  70	00051 data	DB	70h	;Reg. 0: Bildschirmbreite112 Zeichen
5242  5V	00052		DB	5ch	;     1: angezeigt 92 Zeichen
5243  61	00053		DB	61h	;     2: horizontale Sync-Position
5244  08	00054		DB	08h	;     3: Breite des Sync-Impulses
5245  20	00055		DB	20h	;     4: Bildhöhe 64 Z. (Hälfte von Interlace)
5246  10	00056		DB	10h	;     5: Bildhöhenjustage in Zeilen
5247  1E	00057		DB	1eh	;     6: angezeigt 60 Zeilen (Hälfte v. Interl.)
5248  1F	00058		DB	1fh	;     7: vertikale Sync-Position
5249  03	00059		DB	03h	;     8: Interlace-Modus
524A  08	00060		DB	0bh	;     9: Zeilen pro Zeichen -1 (=12 lpc)
524B  29	00061		DB	29h	;    10: Cursor: oberer Rand und Anzeigemodus
524C  09	00062		DB	09h	;    11: dto. unterer Rand
524D  00	00063		DB	00h	;    12: Bildschirmanfang (relativ zu 3800h) MSB
524E  00	00064		DB	00h	;    13: dto. LSB
524F  00	00065		DB	00h	;    14: Cursoradresse (relativ zu 3800h) MSB
5250  00	00066		DB	99h	;    15: dto. LSB
		00067
5200		00068		END	start	; dort Einsprung

00000 Fehler

data	5241	fillscr	521F	setcrtc	5207	setpix	5226	start	5200